package org.dromara.tms.domain.vo;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.tms.domain.Order;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;



/**
 * 订单视图对象 tms_order
 *
 * @author wulongbo
 * @date 2024-10-26
 */
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = Order.class)
public class OrderVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 逻辑主键（简单自增主键）
     */
    @ExcelProperty(value = "逻辑主键", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "简=单自增主键")
    private Long id;

    /**
     * 用户ID
     */
    @ExcelProperty(value = "用户ID")
    private Long userId;

    /**
     * 运单号
     */
    @ExcelProperty(value = "运单号")
    private String orderNo;

    /**
     * 第三方入库单号
     */
    @ExcelProperty(value = "第三方入库单号")
    private String inboundNo;

    /**
     * 物流运单号
     */
    @ExcelProperty(value = "物流运单号")
    private String logisticsNo;

    /**
     * 集货方式数据字典键值
     */
    @ExcelProperty(value = "集货方式数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_store_type")
    private String storeType;

    /**
     * 目的地国家数据字典键值
     */
    @ExcelProperty(value = "目的地国家数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_country_type")
    private String countryType;

    /**
     * 运输方式数据字典键值
     */
    @ExcelProperty(value = "运输方式数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_transport_type")
    private String transportType;

    /**
     * 海外仓送仓方式数据字典键值
     */
    @ExcelProperty(value = "海外仓送仓方式数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_delivery_type")
    private String deliveryMethod;

    /**
     * 货物类型数据字典 
     */
    @ExcelProperty(value = "货物类型数据字典 ", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_goods_type")
    private String omsGoodsType;

    /**
     * 货物类型数据字典
     */
    @ExcelProperty(value = "货物类型数据字典", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_goods_type")
    private String goodsType;

    /**
     * 单独报关数据字典键值
     */
    @ExcelProperty(value = "单独报关数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_customs_declaration_type")
    private String customsDeclaration;

    /**
     * 交货方式数据字典键值
     */
    @ExcelProperty(value = "交货方式数据字典键值", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "tms_deal_type")
    private String dealMethod;

    /**
     * 运单状态（0：草稿、1：待入仓（在途）、2：等待装柜（已测量）、3：已装柜（报关中）、4：已发运（运输中）、5：已抵达（清关中）、6：派送中、7：已签收）
     */
    @ExcelProperty(value = "运单状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "order_type")
    private String orderType;

    /**
     * 预报方数
     */
    @ExcelProperty(value = "预报方数")
    private Long preVolume;

    /**
     * 基础信息订单备注
     */
    @ExcelProperty(value = "基础信息订单备注")
    private String remake;

    /**
     * 仓库id
     */
    @ExcelProperty(value = "仓库id")
    private Long warehouseId;

    /**
     * 收货地址id
     */
    @ExcelProperty(value = "收货地址id")
    private Long addressId;

    /**
     * 箱唛
     */
    @ExcelProperty(value = "箱唛")
    private String boxLabel;

    /**
     * 生成箱唛详情的url
     */
    @ExcelProperty(value = "生成箱唛详情的url")
    private String boxLabelUrl;

    /**
     * 上传的签收单url
     */
    @ExcelProperty(value = "上传的签收单url")
    private String signatureFormUrl;

    /**
     * 拆箱标记（0：未拆箱，1：已拆箱）
     */
    @ExcelProperty(value = "拆箱标记", converter = ExcelDictConvert.class)
    @ExcelDictFormat(readConverterExp = "0=：未拆箱，1：已拆箱")
    private Long unBoxingFlag;

    /**
     * 测量时间
     */
    @ExcelProperty(value = "测量时间")
    private Date measureTime;

    /**
     * 装柜时间
     */
    @ExcelProperty(value = "装柜时间")
    private Date packingTime;

    /**
     * 发运时间
     */
    @ExcelProperty(value = "发运时间")
    private Date shippedTime;

    /**
     * 清关时间
     */
    @ExcelProperty(value = "清关时间")
    private Date arrivedTime;

    /**
     * 派送时间
     */
    @ExcelProperty(value = "派送时间")
    private Date deliveryTime;

    /**
     * 完成时间
     */
    @ExcelProperty(value = "完成时间")
    private Date signedTime;

    /**
     * 预计到港时间
     */
    @ExcelProperty(value = "预计到港时间")
    private Date predictArrivedTime;

    /**
     * 待入仓时间
     */
    @ExcelProperty(value = "待入仓时间")
    private Date inTransitTime;


}
